package com.jwd.avmanager.util;

/**
 * 操作系统判断工具类
 */
public final class OSUtils {

    private static final String OS = System.getProperty("os.name").toLowerCase();
    private static final String FILE_SEPARATOR = System.getProperty("file.separator");
    
    private OSUtils() {
        // 私有构造方法，防止实例化
    }

    /**
     * 判断是否是Windows系统
     */
    public static boolean isWindows() {
        return OS.contains("win");
    }

    /**
     * 判断是否是Linux系统
     */
    public static boolean isLinux() {
        return OS.contains("nix") || OS.contains("nux") || OS.contains("aix");
    }

    /**
     * 判断是否是Mac系统
     */
    public static boolean isMac() {
        return OS.contains("mac");
    }

    /**
     * 判断是否是Solaris系统
     */
    public static boolean isSolaris() {
        return OS.contains("sunos");
    }

    /**
     * 判断是否是Unix-like系统（包括Linux和Mac）
     */
    public static boolean isUnixLike() {
        return isLinux() || isMac() || isSolaris();
    }

    /**
     * 获取操作系统名称
     */
    public static String getOsName() {
        return System.getProperty("os.name");
    }

    /**
     * 获取操作系统架构
     */
    public static String getOsArch() {
        return System.getProperty("os.arch");
    }

    /**
     * 获取操作系统版本
     */
    public static String getOsVersion() {
        return System.getProperty("os.version");
    }

    /**
     * 获取文件路径分隔符
     */
    public static String getFileSeparator() {
        return FILE_SEPARATOR;
    }

    /**
     * 获取当前操作系统的换行符
     */
    public static String getLineSeparator() {
        return System.getProperty("line.separator");
    }

    /**
     * 打印所有操作系统信息（用于调试）
     */
    public static void printOsInfo() {
        System.out.println("OS Name: " + getOsName());
        System.out.println("OS Arch: " + getOsArch());
        System.out.println("OS Version: " + getOsVersion());
        System.out.println("File Separator: " + getFileSeparator());
        System.out.println("Line Separator: " + escapeLineSeparator(getLineSeparator()));
    }

    private static String escapeLineSeparator(String separator) {
        return separator.replace("\r", "\\r").replace("\n", "\\n");
    }

    /**
     * 获取操作系统类型枚举
     */
    public static OSType getOSType() {
        if (isWindows()) {
            return OSType.WINDOWS;
        } else if (isLinux()) {
            return OSType.LINUX;
        } else if (isMac()) {
            return OSType.MAC;
        } else if (isSolaris()) {
            return OSType.SOLARIS;
        } else {
            return OSType.UNKNOWN;
        }
    }

    /**
     * 操作系统类型枚举
     */
    public enum OSType {
        WINDOWS, LINUX, MAC, SOLARIS, UNKNOWN
    }
}